package cn.iocoder.yudao.module.member.service.curriculumVitaeSendRecord;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.curriculumVitaeSendRecord.dto.CurriculumVitaeSendRecordPageReqDTO;
import cn.iocoder.yudao.module.member.controller.admin.curriculumVitaeSendRecord.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.curriculumVitaeSendRecord.CurriculumVitaeSendInviteRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.curriculumVitaeSendRecord.CurriculumVitaeSendRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.dal.dataobject.curriculumVitaeSendRecord.CurriculumVitaeSendRecordGroupDO;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 简历投递记录 Service 接口
 *
 * @author 谭万全
 */
public interface CurriculumVitaeSendRecordService {

    /**
     * 创建简历投递记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCurriculumVitaeSendRecord(@Valid CurriculumVitaeSendRecordCreateReqVO createReqVO);

    /**
     * 更新简历投递记录
     *
     * @param updateReqVO 更新信息
     */
    void updateCurriculumVitaeSendRecord(@Valid CurriculumVitaeSendRecordUpdateReqVO updateReqVO);

    /**
     * 删除简历投递记录
     *
     * @param id 编号
     */
    void deleteCurriculumVitaeSendRecord(Long id);

    /**
     * 删除简历投递记录
     *
     * @param id 编号
     */
    void deleteCurriculumVitaeSendRecords(Collection<Long> ids);


    /**
     * 获得简历投递记录
     *
     * @param id 编号
     * @return 简历投递记录
     */
    CurriculumVitaeSendRecordDO getCurriculumVitaeSendRecord(Long id);

    /**
     * 获得简历投递记录
     *
     * @param id 编号
     * @return 简历投递记录
     */
    CurriculumVitaeSendRecordDO getCurriculumVitaeSendRecordByPara(Long studentId, Long jobId, Long companyId, Long resumId);


    /**
     * 获得简历投递记录列表
     *
     * @param ids 编号
     * @return 简历投递记录列表
     */
    List<CurriculumVitaeSendRecordDO> getCurriculumVitaeSendRecordList(Collection<Long> ids);

    /**
     * 获得简历投递记录分页
     *
     * @param pageReqVO 分页查询
     * @return 简历投递记录分页
     */
    PageResult<CurriculumVitaeSendRecordDO> getCurriculumVitaeSendRecordPage(CurriculumVitaeSendRecordPageReqVO pageReqVO);

    PageResult<CurriculumVitaeSendRecordDO> getCurriculumVitaeSendRecordPage1(CurriculumVitaeSendRecordPageReqVO pageReqVO);

    /**
     * 获得简历投递记录列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 简历投递记录列表
     */
    List<CurriculumVitaeSendRecordDO> getCurriculumVitaeSendRecordList(CurriculumVitaeSendRecordExportReqVO exportReqVO);


    List<Long> getCurriculumVitaeSendRecordIdList(CurriculumVitaeSendRecordPageReqVO pageReqVO) ;

    /**
     * 通过职位获得简历投递记录分页
     *
     * @param pageReqVO 分页查询
     * @return 简历投递记录分页
     */
    PageResult<CurriculumVitaeSendRecordGroupDO> checkInfoByJob(CurriculumVitaeSendRecordGroupPageReqVO pageReqVO);


    PageResult<CurriculumVitaeSendRecordDO> getpageByJob( CurriculumVitaeSendRecordPageReqVO pageVO);

    /**
     * 根据学生查投递记录
     * @param reqVo
     * @return
     */
     PageResult<CurriculumVitaeSendInviteRecordDO> getpageByStudent(CurriculumVitaeSendRecordPageReqVO reqVO);


    Long sendStudentCurriculumVitae(Long companyId,Long studentCurriculumVitaeId,Long jobId,String remark);

    Long noOpenCount(Long studentId);
}
